#define CHAR_NUM 26  // 小写字母数量，用于构造计数映射表

// step 1# 判断两个字符串长度是否相等，不相等直接返回 false
bool isAnagram(char* s, char* t) {
    if (strlen(s) != strlen(t)) {
        return false;
    }

    // step 2# 初始化两个计数字母映射表 mapS 和 mapT
    int mapS[CHAR_NUM] = {0};  // mapS 统计字符串 s 中每个字母的个数
    int mapT[CHAR_NUM] = {0};  // mapT 统计字符串 t 中每个字母的个数

    // step 3# 遍历字符串 s 和 t，对各自的字符进行计数
    for (int i = 0; i < strlen(s); i++) {
        for (int j = 0; j < CHAR_NUM; j++) {
            if (s[i] - 'a' == j) {
                mapS[j]++;  // 字符 s[i] 对应的字母计数 +1
            }
            if (t[i] - 'a' == j) {
                mapT[j]++;  // 字符 t[i] 对应的字母计数 +1
            }
        }
    }

    // step 4# 比较两个映射表的计数是否一致
    for (int i = 0; i < CHAR_NUM; i++) {
        if (mapS[i] != mapT[i]) {
            return false;  // 任意字母出现次数不一致，说明不是字母异位词
        }
    }

    // step 5# 所有字母计数都相同，返回 true
    return true;
}
